
package com.jf.cloud.combo.mapper;

import com.jf.cloud.combo.model.Combo;
import com.jf.cloud.common.product.dto.ComboDTO;
import com.jf.cloud.common.product.vo.ComboVO;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * 套餐
 *
 * @author zz
 * @date 2022-08-16 09:18:06
 */
public interface ComboMapper {

    /**
     * 获取套餐列表
     * @param comboDTO
     * @return 套餐列表
     */
    List<ComboVO> list(@Param("comboDTO") ComboDTO comboDTO);

    /**
     * 根据套餐id获取套餐
     *
     * @param comboId 套餐id
     * @return 套餐
     */
    ComboVO getByComboId(@Param("comboId") Long comboId);

    /**
     * 保存套餐
     * @param combo 套餐
     */
    void save(@Param("combo") Combo combo);

    /**
     * 更新套餐
     * @param combo 套餐
     */
    void update(@Param("combo") Combo combo);

    /**
     * 根据套餐id删除套餐
     * @param comboId
     */
    void deleteById(@Param("comboId") Long comboId);

    /**
     * 修改商品套餐状态
     * @param comboId
     * @param status
     */
    void updateComboStatus(@Param("comboId") Long comboId,@Param("status") Integer status);

    /**
     * 批量修改套餐状态
     * @param comboIdList
     * @param status
     */
    void batchUpdateComboStatus(@Param("comboIdList") List<Long> comboIdList,@Param("status") Integer status);

    /**
     * 通过套餐id获取套餐与套餐下的商品信息
     *
     * @param comboId
     * @return
     */
    ComboVO getComboWithSpuInfoById(@Param("comboId") Long comboId);

    /**
     *   根据spuId获取相关的套餐信息
     * @param spuId
     * @param shopId
     * @return
     */
    List<ComboVO> listComboInfoBySpuId(@Param("shopId")Long shopId, @Param("spuId")Long spuId);

    /**
     * 根据商品id获取套餐信息
     * @param spuId
     * @return
     */
    List<ComboVO> comboVoListBySpuId(@Param("spuId") Long spuId);

    /**
     * 获取应该结束但是没有结束的套餐列表
     *
     * @return 应该结束但是没有结束的秒杀列表
     */
    List<ComboVO> listUnEndButNeedEndActivity();

    /**
     * 批量 套餐销量增加
     * @param comboList
     */
    void comboSoldNumAdd(@Param("comboList") List<ComboDTO> comboList);

    /**
     * 根据主商品id获取指定状态的套餐
     * @param spuId
     * @param status
     * @return
     */
    List<ComboVO> comboIdByMainSpuId(@Param("spuId") Long spuId,@Param("status") Integer status);

    /**
     * 查看商品是否参与了正在进行的套餐
     * @param spuId
     * @return
     */
    Integer checkComboSpu(@Param("spuId") Long spuId,@Param("shopId") Long shopId);

    /**
     * 获取本该开始的而未开始的套餐id
     * @return
     */
    List<ComboVO> notStartComboIdButStart();


    /**
     * 根据套餐id集合检查套餐是否全部可用
     * @param comboIdList
     * @return 返回不可用套餐数量 0代表全部可用，其它数据代表有不可用的套餐
     */
    Integer checkComboIsUsable(@Param("comboIdList") List<Long> comboIdList);

    /**
     * 根据搭配商品id获取主商品id
     */
    List<Long> getComboMainSpuIdBySpuId(@Param("spuId") Long spuId);


    /**
     * 根据套餐id集合获取套餐信息
     * @param comboIdList
     * @return
     */
    List<ComboVO> getComboByComboIdList(@Param("comboIdList") List<Long> comboIdList);
}
